#include "mysql.h"
#include <iostream>
using namespace std;

DB::DB()
{
    // 初始化MYSQL结构体
    this->mysql_ = mysql_init(nullptr);
    // 连接MySQL Server
    if (!mysql_real_connect(mysql_, "127.0.0.1", "root", 
        "123456", "fileserver", 3306, nullptr, 0))
    {
        cout << "connect mysql server error!" << endl;
		exit(-1);
    }
    // 设置字符编码
    mysql_query(mysql_, "set names gbk");
}

DB::~DB()
{
    mysql_close(mysql_);
    mysql_ = nullptr;
}

void DB::update(string sql)
{
    cout << "sql:" << sql << endl;
    if (0 != mysql_query(mysql_, sql.c_str()))
    {
        // 记录mysql update出错的详细信息
        cout << mysql_error(mysql_) << endl;
    }
}

vector<vector<string>> DB::query(string sql)
{
    cout << "sql:" << sql << endl;
    if (0 != mysql_query(mysql_, sql.c_str()))
    {
        // 记录mysql update出错的详细信息
        cout << mysql_error(mysql_) << endl;
        return vector<vector<string>>();
    }
    MYSQL_RES *res = mysql_store_result(mysql_);
    int count = mysql_field_count(mysql_);
    if (0 == count)
    {
        cout << sql << " 查询结果是0行!" << endl;
        mysql_free_result(res);
        return vector<vector<string>>();
    }

    vector<vector<string>> vecs;
    MYSQL_ROW row;
    int fields = mysql_num_fields(res);
    while (row = mysql_fetch_row(res))
    {
        vector<string> v;
        //  每一个行的每一个字段取出来
        for (int i = 0; i < fields; i++)
        {
            v.emplace_back(row[i]);
        }

        vecs.emplace_back(v);
    }

    mysql_free_result(res);
    return vecs;
}